package droid.frame.utils.android;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;

/**
 * @author coffee<br>
 * 2014-12-3下午3:10:04 <br>
 * public void set(int type, long triggerAtMillis, PendingIntent operation)<br>
 * 闹钟的第一次执行时间，以毫秒为单位，可以自定义时间，不过一般使用当前时间。 <br>
 * 需要注意的是，本属性与第一个属性（type）密切相关， <br>
 * 如果第一个参数对应的闹钟使用的是相对时间（ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP），那么本属性就得使用相对时间（相对于系统启动时间来说），比如当前时间就表示为：SystemClock.elapsedRealtime()； <br>
 * 如果第一个参数对应的闹钟使用的是绝对时间（RTC、RTC_WAKEUP、POWER_OFF_WAKEUP），那么本属性就得使用绝对时间，比如当前时间就表示为：System.currentTimeMillis()。
 */
public class AlarmMgr {

    /**
     * @param context
     * @param intervalMillis 指定时间后开始执行, 单位毫秒
     */
    public static void startAlarm(Context context, int intervalMillis, String intentAction) {
        AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent();
        intent.setAction(intentAction);// droid.intent.action_xmpp_beat
        PendingIntent operation = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        long triggerAtMillis = System.currentTimeMillis() + intervalMillis;
        // setRepeating
        // alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtMillis, intervalMillis, operation);
        alarm.cancel(operation);
        alarm.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation);
    }

    public static void stopAlarm(Context context, String intentAction) {
        AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent();
        intent.setAction(intentAction);
        PendingIntent operation = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarm.cancel(operation);
    }
}
